Export a board to PowerPoint, one slide per empty-space area - #92
Merged
Conversation
The board is one unbounded plane with no notion of a page. File > Export cuts it into areas where it is empty: a container keeps its linked ink, a stroke that spans two containers keeps them together, and a region is cut at the widest empty band until it fits a slide at the smallest text the person accepts. Each area becomes a picture slide rendered by the same BoardSurface that draws the screen, with the text containers in the speaker notes and an overview slide first. The dialog previews the areas numbered on the board and updates as the settings move. The partitioner lives in Core and is smoke-tested; the deck writer is a new SQLBI.Whiteboard.Export assembly over the Open XML SDK, listed in the signing step. docs/export.md is the plan, docs/export-decisions.md the calls made while implementing it, decision 26 the summary. Co-Authored-By: Claude Fable 5.1 <[email protected]>
… Label Co-Authored-By: Claude Fable 5.1 <[email protected]>
Co-Authored-By: Claude Fable 5.1 <[email protected]>
Co-Authored-By: Claude Fable 5.1 <[email protected]>
…e dialog to the screen Co-Authored-By: Claude Fable 5.1 <[email protected]>
…oint export Co-Authored-By: Claude Fable 5.1 <[email protected]>
Co-Authored-By: Claude Fable 5.1 <[email protected]>
marcosqlbi
added a commit
that referenced
this pull request
Sep 3, 2026
…ge (#97) ## Why Phase E2 of [docs/export.md](docs/export.md), on top of the PowerPoint export merged in #92. A deck suits a presenter; a PDF suits an attendee who wants to read, print, or zoom, and PDF has the one freedom a slide lacks: a page of any size. Replaces #93, which GitHub closed when its base branch was deleted after the merge. ## What it does - **PDF is a choice in the same Export dialog.** The dialog relabels itself (pages rather than slides), hides the slide size and the notes switch, and shows the page size (A4 or Letter, landscape) and a footer switch. The areas and the preview are exactly those of the deck, so a deck and a PDF of the same board agree. - **One page per area**: the area's picture under a header line with its title, a bookmark per page, and a footer with the board name, the date, and "n of m". The overview page comes first when there are at least two areas. - **Whole board on one page**: a single page the shape of the board, rendered at up to 6000 pixels on the longer edge and sized at 144 dpi (a 41-inch page for a 6000-pixel board, under the 200-inch limit viewers enforce). No header or footer: the page is the board. ## Where the code is - `SQLBI.Whiteboard.Export/PdfDocumentWriter.cs` over `PdfSharp` 6.2.4 (MIT, managed-only, per decision 21). Fonts are read from the Windows fonts folder through a small resolver, since PDFsharp's Core build brings none. - `ExportSettings` gains the format, page size, and footer; `BoardExporter` branches on the format and renders the poster larger; the dialog gains the PDF controls. - Smoke tests read the produced PDF back: page count, A4 landscape size, one bookmark per page, and the fit-to-picture page size. The smaller calls are listed under E2 in [docs/export-decisions.md](docs/export-decisions.md); decision 26 is updated, and the 1.3.0 release notes gain their PDF entry. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5.1 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
A
.wboardis one unbounded plane. Attendees ask for the board after a session, and a deck is what they can open, annotate, and search. Nothing in the file says where a slide begins, so most of this change is deciding that: docs/export.md is the plan and the alternatives, decision 26 the summary, and docs/export-decisions.md every smaller call made while building it, for review.What it does
BoardSurfacethat draws the screen, at up to 3840×2160, so calligraphy, the highlighter, and SVG come out as seen. The slide title comes from the dominant container (the language service's own title for DAX and SQL), and the area's text containers go in the speaker notes so code can be copied.Where the code is
SQLBI.Whiteboard.Core/Export: the partitioner and layout options, covered by the smoke tests with synthetic boards.SQLBI.Whiteboard.Export(new, net10.0, no WPF): the deck writer overDocumentFormat.OpenXml(MIT, managed-only, per decision 21). Added to the pipeline's signing step. The smoke tests open the produced deck.SQLBI.Whiteboard/Export: the rasterizer that generalizes thepreview.pngrenderer, the overlay, the exporter, and the dialog.The version is not bumped; the changelog line is ready when a release is cut.
🤖 Generated with Claude Code